package main

//给你两个整数数组 nums1 和 nums2 ，请你实现一个支持下述两类查询的数据结构：
//
//累加 ，将一个正整数加到 nums2 中指定下标对应元素上。
//计数 ，统计满足 nums1[i] + nums2[j] 等于指定值的下标对 (i, j) 数目（0 <= i < nums1.length 且 0 <= j < nums2.length）。
//实现 FindSumPairs 类：
//
//FindSumPairs(int[] nums1, int[] nums2) 使用整数数组 nums1 和 nums2 初始化 FindSumPairs 对象。
//void add(int index, int val) 将 val 加到 nums2[index] 上，即，执行 nums2[index] += val 。
//int count(int tot) 返回满足 nums1[i] + nums2[j] == tot 的下标对 (i, j) 数目。

type FindSumPairs struct {
	Nums1 []int
	Nums2 []int
}

func Constructor(nums1 []int, nums2 []int) FindSumPairs {
	return FindSumPairs{
		Nums1: nums1,
		Nums2: nums2,
	}
}

func (this *FindSumPairs) Add(index int, val int) {
	this.Nums2[index] += val
}

func (this *FindSumPairs) Count(tot int) int {
	result := 0
	nums1 := this.Nums1
	nums2 := this.Nums2

	nums1Map := make(map[int]int)

	for i := 0; i < len(nums1); i++ {
		nums1Map[nums1[i]]++
	}

	for j := 0; j < len(nums2); j++ {
		i := tot - nums2[j]
		if value, ok := nums1Map[i]; ok {
			result += value
		}
	}
	return result
}

/**
 * Your FindSumPairs object will be instantiated and called as such:
 * obj := Constructor(nums1, nums2);
 * obj.Add(index,val);
 * param_2 := obj.Count(tot);
 */
